↳ Prolog
↳ PrologToPiTRSProof
lessleaves_in(cons(U, V), cons(W, Z)) → U2(U, V, W, Z, append_in(U, V, U1))
append_in(cons(U, V), Y, cons(U, Z)) → U1(U, V, Y, Z, append_in(V, Y, Z))
append_in(nil, Y, Y) → append_out(nil, Y, Y)
U1(U, V, Y, Z, append_out(V, Y, Z)) → append_out(cons(U, V), Y, cons(U, Z))
U2(U, V, W, Z, append_out(U, V, U1)) → U3(U, V, W, Z, U1, append_in(W, Z, W1))
U3(U, V, W, Z, U1, append_out(W, Z, W1)) → U4(U, V, W, Z, lessleaves_in(U1, W1))
lessleaves_in(nil, cons(W, Z)) → lessleaves_out(nil, cons(W, Z))
U4(U, V, W, Z, lessleaves_out(U1, W1)) → lessleaves_out(cons(U, V), cons(W, Z))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
lessleaves_in(cons(U, V), cons(W, Z)) → U2(U, V, W, Z, append_in(U, V, U1))
append_in(cons(U, V), Y, cons(U, Z)) → U1(U, V, Y, Z, append_in(V, Y, Z))
append_in(nil, Y, Y) → append_out(nil, Y, Y)
U1(U, V, Y, Z, append_out(V, Y, Z)) → append_out(cons(U, V), Y, cons(U, Z))
U2(U, V, W, Z, append_out(U, V, U1)) → U3(U, V, W, Z, U1, append_in(W, Z, W1))
U3(U, V, W, Z, U1, append_out(W, Z, W1)) → U4(U, V, W, Z, lessleaves_in(U1, W1))
lessleaves_in(nil, cons(W, Z)) → lessleaves_out(nil, cons(W, Z))
U4(U, V, W, Z, lessleaves_out(U1, W1)) → lessleaves_out(cons(U, V), cons(W, Z))
LESSLEAVES_IN(cons(U, V), cons(W, Z)) → U21(U, V, W, Z, append_in(U, V, U1))
LESSLEAVES_IN(cons(U, V), cons(W, Z)) → APPEND_IN(U, V, U1)
APPEND_IN(cons(U, V), Y, cons(U, Z)) → U11(U, V, Y, Z, append_in(V, Y, Z))
APPEND_IN(cons(U, V), Y, cons(U, Z)) → APPEND_IN(V, Y, Z)
U21(U, V, W, Z, append_out(U, V, U1)) → U31(U, V, W, Z, U1, append_in(W, Z, W1))
U21(U, V, W, Z, append_out(U, V, U1)) → APPEND_IN(W, Z, W1)
U31(U, V, W, Z, U1, append_out(W, Z, W1)) → U41(U, V, W, Z, lessleaves_in(U1, W1))
U31(U, V, W, Z, U1, append_out(W, Z, W1)) → LESSLEAVES_IN(U1, W1)
lessleaves_in(cons(U, V), cons(W, Z)) → U2(U, V, W, Z, append_in(U, V, U1))
append_in(cons(U, V), Y, cons(U, Z)) → U1(U, V, Y, Z, append_in(V, Y, Z))
append_in(nil, Y, Y) → append_out(nil, Y, Y)
U1(U, V, Y, Z, append_out(V, Y, Z)) → append_out(cons(U, V), Y, cons(U, Z))
U2(U, V, W, Z, append_out(U, V, U1)) → U3(U, V, W, Z, U1, append_in(W, Z, W1))
U3(U, V, W, Z, U1, append_out(W, Z, W1)) → U4(U, V, W, Z, lessleaves_in(U1, W1))
lessleaves_in(nil, cons(W, Z)) → lessleaves_out(nil, cons(W, Z))
U4(U, V, W, Z, lessleaves_out(U1, W1)) → lessleaves_out(cons(U, V), cons(W, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
LESSLEAVES_IN(cons(U, V), cons(W, Z)) → U21(U, V, W, Z, append_in(U, V, U1))
LESSLEAVES_IN(cons(U, V), cons(W, Z)) → APPEND_IN(U, V, U1)
APPEND_IN(cons(U, V), Y, cons(U, Z)) → U11(U, V, Y, Z, append_in(V, Y, Z))
APPEND_IN(cons(U, V), Y, cons(U, Z)) → APPEND_IN(V, Y, Z)
U21(U, V, W, Z, append_out(U, V, U1)) → U31(U, V, W, Z, U1, append_in(W, Z, W1))
U21(U, V, W, Z, append_out(U, V, U1)) → APPEND_IN(W, Z, W1)
U31(U, V, W, Z, U1, append_out(W, Z, W1)) → U41(U, V, W, Z, lessleaves_in(U1, W1))
U31(U, V, W, Z, U1, append_out(W, Z, W1)) → LESSLEAVES_IN(U1, W1)
lessleaves_in(cons(U, V), cons(W, Z)) → U2(U, V, W, Z, append_in(U, V, U1))
append_in(cons(U, V), Y, cons(U, Z)) → U1(U, V, Y, Z, append_in(V, Y, Z))
append_in(nil, Y, Y) → append_out(nil, Y, Y)
U1(U, V, Y, Z, append_out(V, Y, Z)) → append_out(cons(U, V), Y, cons(U, Z))
U2(U, V, W, Z, append_out(U, V, U1)) → U3(U, V, W, Z, U1, append_in(W, Z, W1))
U3(U, V, W, Z, U1, append_out(W, Z, W1)) → U4(U, V, W, Z, lessleaves_in(U1, W1))
lessleaves_in(nil, cons(W, Z)) → lessleaves_out(nil, cons(W, Z))
U4(U, V, W, Z, lessleaves_out(U1, W1)) → lessleaves_out(cons(U, V), cons(W, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
APPEND_IN(cons(U, V), Y, cons(U, Z)) → APPEND_IN(V, Y, Z)
lessleaves_in(cons(U, V), cons(W, Z)) → U2(U, V, W, Z, append_in(U, V, U1))
append_in(cons(U, V), Y, cons(U, Z)) → U1(U, V, Y, Z, append_in(V, Y, Z))
append_in(nil, Y, Y) → append_out(nil, Y, Y)
U1(U, V, Y, Z, append_out(V, Y, Z)) → append_out(cons(U, V), Y, cons(U, Z))
U2(U, V, W, Z, append_out(U, V, U1)) → U3(U, V, W, Z, U1, append_in(W, Z, W1))
U3(U, V, W, Z, U1, append_out(W, Z, W1)) → U4(U, V, W, Z, lessleaves_in(U1, W1))
lessleaves_in(nil, cons(W, Z)) → lessleaves_out(nil, cons(W, Z))
U4(U, V, W, Z, lessleaves_out(U1, W1)) → lessleaves_out(cons(U, V), cons(W, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
APPEND_IN(cons(U, V), Y, cons(U, Z)) → APPEND_IN(V, Y, Z)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
APPEND_IN(cons(U, V), Y) → APPEND_IN(V, Y)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
U21(U, V, W, Z, append_out(U, V, U1)) → U31(U, V, W, Z, U1, append_in(W, Z, W1))
U31(U, V, W, Z, U1, append_out(W, Z, W1)) → LESSLEAVES_IN(U1, W1)
LESSLEAVES_IN(cons(U, V), cons(W, Z)) → U21(U, V, W, Z, append_in(U, V, U1))
lessleaves_in(cons(U, V), cons(W, Z)) → U2(U, V, W, Z, append_in(U, V, U1))
append_in(cons(U, V), Y, cons(U, Z)) → U1(U, V, Y, Z, append_in(V, Y, Z))
append_in(nil, Y, Y) → append_out(nil, Y, Y)
U1(U, V, Y, Z, append_out(V, Y, Z)) → append_out(cons(U, V), Y, cons(U, Z))
U2(U, V, W, Z, append_out(U, V, U1)) → U3(U, V, W, Z, U1, append_in(W, Z, W1))
U3(U, V, W, Z, U1, append_out(W, Z, W1)) → U4(U, V, W, Z, lessleaves_in(U1, W1))
lessleaves_in(nil, cons(W, Z)) → lessleaves_out(nil, cons(W, Z))
U4(U, V, W, Z, lessleaves_out(U1, W1)) → lessleaves_out(cons(U, V), cons(W, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
U21(U, V, W, Z, append_out(U, V, U1)) → U31(U, V, W, Z, U1, append_in(W, Z, W1))
U31(U, V, W, Z, U1, append_out(W, Z, W1)) → LESSLEAVES_IN(U1, W1)
LESSLEAVES_IN(cons(U, V), cons(W, Z)) → U21(U, V, W, Z, append_in(U, V, U1))
append_in(cons(U, V), Y, cons(U, Z)) → U1(U, V, Y, Z, append_in(V, Y, Z))
append_in(nil, Y, Y) → append_out(nil, Y, Y)
U1(U, V, Y, Z, append_out(V, Y, Z)) → append_out(cons(U, V), Y, cons(U, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
U21(W, Z, append_out(U1)) → U31(U1, append_in(W, Z))
LESSLEAVES_IN(cons(U, V), cons(W, Z)) → U21(W, Z, append_in(U, V))
U31(U1, append_out(W1)) → LESSLEAVES_IN(U1, W1)
append_in(cons(U, V), Y) → U1(U, append_in(V, Y))
append_in(nil, Y) → append_out(Y)
U1(U, append_out(Z)) → append_out(cons(U, Z))
append_in(x0, x1)
U1(x0, x1)
The following rules are removed from R:
U21(W, Z, append_out(U1)) → U31(U1, append_in(W, Z))
U31(U1, append_out(W1)) → LESSLEAVES_IN(U1, W1)
Used ordering: POLO with Polynomial interpretation [25]:
append_in(nil, Y) → append_out(Y)
POL(LESSLEAVES_IN(x1, x2)) = 2·x1 + x2
POL(U1(x1, x2)) = 2·x1 + x2
POL(U21(x1, x2, x3)) = x1 + x2 + 2·x3
POL(U31(x1, x2)) = 1 + 2·x1 + x2
POL(append_in(x1, x2)) = x1 + x2
POL(append_out(x1)) = 1 + x1
POL(cons(x1, x2)) = 2·x1 + x2
POL(nil) = 2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
LESSLEAVES_IN(cons(U, V), cons(W, Z)) → U21(W, Z, append_in(U, V))
append_in(cons(U, V), Y) → U1(U, append_in(V, Y))
U1(U, append_out(Z)) → append_out(cons(U, Z))
append_in(x0, x1)
U1(x0, x1)